package com.dlc.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dlc.shop.bean.model.TakeStock;
import com.dlc.shop.bean.param.TakeStockParam;
import com.dlc.shop.bean.vo.TakeStockVO;
import com.dlc.shop.common.util.PageParam;

import java.util.List;

/**
 *
 *
 * @author Citrus
 * @date 2021-09-15 11:18:33
 */
public interface TakeStockService extends IService<TakeStock> {
    /**
     * 分页查询盘点列表
     * @param page
     * @param takeStock
     * @return
     */
    IPage<TakeStockVO> pageByParams(PageParam<TakeStock> page, TakeStockParam takeStock);

    /**
     * 获取实物盘点详情
     * @param takeStockId 实物盘点id
     * @return 实物盘点VO
     */
    TakeStockVO getInfo(Long takeStockId);

    /**
     * 新增实物盘点
     *
     * @param takeStock 实物盘点
     * @return 实物盘点id
     */
    Long saveTakeStock(TakeStock takeStock);

    /**
     * 更新盘点信息，包括商品
     * @param takeStock
     * @return
     */
    boolean updateTakeStock(TakeStock takeStock);

    /**
     * 完成盘点，包括商品
     * @param takeStock
     * @return
     */
    boolean finishTakeStock(TakeStock takeStock);

    /**
     * 作废盘点，包括商品
     * @param takeStock
     * @return
     */
    boolean voidedTakeStock(TakeStock takeStock);

    /**
     * 导出盘点信息
     * @param takeStock
     * @return
     */
    List<TakeStockVO> listByParams(TakeStockParam takeStock);

    /**
     * 获取实物盘点信息
     * @param takeStockId
     * @return
     */
    TakeStockVO getTakeStock(Long takeStockId);

    /**
     * 作废实物盘点(通过仓库id)
     * @param warehouseId 仓库id
     */
    void nullifyByWarehouseId(Long warehouseId);

    /**
     * 统计未完成的实物盘点数
     * @param warehouseId 仓库id
     * @return 未完成数
     */
    Long countUnFinish(Long warehouseId);
}
